// RAP [bm] ToolTip
///*******************************************************************************
// * Copyright (c) 2010 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// * IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.ui.internal.handlers;
//
//import org.eclipse.ui.internal.testing.ContributionInfoMessages;
//
//import org.eclipse.core.commands.AbstractHandler;
//import org.eclipse.core.commands.ExecutionEvent;
//import org.eclipse.jface.layout.GridLayoutFactory;
//import org.eclipse.jface.window.ToolTip;
//import org.eclipse.osgi.util.NLS;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.graphics.Point;
//import org.eclipse.swt.graphics.Rectangle;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Control;
//import org.eclipse.swt.widgets.Event;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.swt.widgets.Table;
//import org.eclipse.swt.widgets.TableItem;
//import org.eclipse.swt.widgets.Text;
//import org.eclipse.swt.widgets.Tree;
//import org.eclipse.swt.widgets.TreeItem;
//import org.eclipse.ui.handlers.HandlerUtil;
//import org.eclipse.ui.internal.util.Util;
//import org.eclipse.ui.testing.ContributionInfo;
//import org.osgi.framework.Bundle;
//import org.osgi.framework.FrameworkUtil;
//
///**
// * @since 3.6
// *
// */
//public class SpyHandler extends AbstractHandler {
//
// public Object execute(ExecutionEvent event) {
// Shell shell = HandlerUtil.getActiveShell(event);
// if (shell != null) {
// Control control = shell.getDisplay().getFocusControl();
// if (control != null) {
// showTooltip(control);
// }
// }
// return null;
// }
//
// protected void showTooltip(Control control) {
// ContributionInfo contributionInfo = null;
// Point offset = new Point(0, 0);
// while (control != null) {
// if (control instanceof Table) {
// Table table = (Table) control;
// if (table.getSelectionCount() == 1) {
// TableItem tableItem = table.getSelection()[0];
// contributionInfo = getContributionInfo(tableItem.getData(),
// ContributionInfoMessages.ContributionInfo_TableItem);
// if (contributionInfo != null) {
// Rectangle bounds = tableItem.getBounds();
// offset = new Point(bounds.x, bounds.y);
// break;
// }
// }
// } else if (control instanceof Tree) {
// Tree tree = (Tree) control;
// if (tree.getSelectionCount() == 1) {
// TreeItem treeItem = tree.getSelection()[0];
// contributionInfo = getContributionInfo(treeItem.getData(),
// ContributionInfoMessages.ContributionInfo_TreeItem);
// if (contributionInfo != null) {
// Rectangle bounds = treeItem.getBounds();
// offset = new Point(bounds.x, bounds.y);
// break;
// }
// }
// }
// String optionalElementType;
//
// // "force" a contribution info if we are at a shell
// if (control instanceof Shell)
// optionalElementType = ContributionInfoMessages.ContributionInfo_Window;
// else
// optionalElementType = null;
//
// contributionInfo = getContributionInfo(control.getData(), optionalElementType);
//
// if (contributionInfo != null) {
// break;
// }
// control = control.getParent();
// }
// if (contributionInfo == null) {
// return;
// }
// doShowTooltip(control, offset, contributionInfo);
// }
//
// /**
// * @param control
// * @param offset
// * @param contributionInfo
// */
// protected void doShowTooltip(Control control, Point offset,
// final ContributionInfo contributionInfo) {
// ToolTip toolTip = new ToolTip(control, ToolTip.NO_RECREATE, true) {
//
// protected Composite createToolTipContentArea(Event event, Composite parent) {
// // Create the content area
// Composite composite = new Composite(parent, SWT.NONE);
// composite.setBackground(parent.getDisplay().getSystemColor(
// SWT.COLOR_INFO_BACKGROUND));
// Text text = new Text(composite, SWT.READ_ONLY);
// text.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
// String info = NLS.bind(ContributionInfoMessages.ContributionInfo_ContributedBy,
// contributionInfo.getElementType(), contributionInfo.getBundleId());
// text.setText(info);
// GridLayoutFactory.fillDefaults().margins(2, 2).generateLayout(composite);
// return composite;
// }
// };
// toolTip.setHideOnMouseDown(false);
// toolTip.setHideDelay(3000);
// toolTip.show(offset);
// }
//
// /**
// * Returns a ContributionInfo for the given data object (typically, a data
// * object associated with a widget). If the data object is a
// * ContributionInfo, return it. If it can be adapted to ContributionInfo,
// * return the result of the adaptation. Otherwise, if a non-null
// * 'optionalElementType' string is given, return a contribution info based
// * on it and the bundle that contains the given object's class.
// */
// ContributionInfo getContributionInfo(Object data, String optionalElementType) {
// if (data instanceof ContributionInfo) {
// return (ContributionInfo) data;
// }
// ContributionInfo result = (ContributionInfo) Util.getAdapter(data, ContributionInfo.class);
// if (optionalElementType != null && result == null && data != null) {
// Bundle bundle = FrameworkUtil.getBundle(data.getClass());
// if (bundle != null) {
// result = new ContributionInfo(bundle.getSymbolicName(),
// optionalElementType != null ? optionalElementType
// : ContributionInfoMessages.ContributionInfo_Unknown, null);
// }
// }
// return result;
// }
//}